//#import <Foundation/Foundation.h>
//#import "HTTPResponse.h"
//
//@class HTTPConnection;
//
///**
// * This is an asynchronous version of HTTPFileResponse.
// * It reads data from the given file asynchronously via GCD.
// * 
// * It may be overriden to allow custom post-processing of the data that has been read from the file.
// * An example of this is the HTTPDynamicFileResponse class.
//**/
//
//@interface HTTPAsyncFileResponse : NSObject <HTTPResponse>
//{	
//	HTTPConnection *connection;
//	
//	NSString *filePath;
//	UInt64 fileLength;
//	UInt64 fileOffset;  // File offset as pertains to data given to connection
//	UInt64 readOffset;  // File offset as pertains to data read from file (but maybe not returned to connection)
//	
//	BOOL aborted;
//	
//	NSData *data;
//	
//	int fileFD;
//	void *readBuffer;
//	NSUInteger readBufferSize;     // Malloced size of readBuffer
//	NSUInteger readBufferOffset;   // Offset within readBuffer where the end of existing data is
//	NSUInteger readRequestLength;
//	dispatch_queue_t readQueue;
//	dispatch_source_t readSource;
//	BOOL readSourceSuspended;
//}
//
//- (id)initWithFilePath:(NSString *)filePath forConnection:(HTTPConnection *)connection;
//- (NSString *)filePath;
//
//@end
//
///**
// * Explanation of Variables (excluding those that are obvious)
// * 
// * fileOffset
// *   This is the number of bytes that have been returned to the connection via the readDataOfLength method.
// *   If 1KB of data has been read from the file, but none of that data has yet been returned to the connection,
// *   then the fileOffset variable remains at zero.
// *   This variable is used in the calculation of the isDone method.
// *   Only after all data has been returned to the connection are we actually done.
// * 
// * readOffset
// *   Represents the offset of the file descriptor.
// *   In other words, the file position indidcator for our read stream.
// *   It might be easy to think of it as the total number of bytes that have been read from the file.
// *   However, this isn't entirely accurate, as the setOffset: method may have caused us to
// *   jump ahead in the file (lseek).
// * 
// * readBuffer
// *   Malloc'd buffer to hold data read from the file.
// * 
// * readBufferSize
// *   Total allocation size of malloc'd buffer.
// * 
// * readBufferOffset
// *   Represents the position in the readBuffer where we should store new bytes.
// * 
// * readRequestLength
// *   The total number of bytes that were requested from the connection.
// *   It's OK if we return a lesser number of bytes to the connection.
// *   It's NOT OK if we return a greater number of bytes to the connection.
// *   Doing so would disrupt proper support for range requests.
// *   If, however, the response is chunked then we don't need to worry about this.
// *   Chunked responses inheritly don't support range requests.
//**/
